#include "../header.h"

//1.双进程。
//2.双管道：全双工。2个管道。

int main(int argc, char const *argv[])
{
    int fds[2];
    int fdm[2];
    pipe(fds);
    pipe(fdm);

    pid_t pid = fork();
    if(pid < 0 )
        exit(-1);
    //父进程空间
    if(pid > 0 )
    {
        //1父进程给子进程传递数据 
        //? 父进程先执行，先写。再读。读  阻塞属性。
        const char *str = "hello child!\n";
        write(fds[1],str,strlen(str));

        //2父进程从管道中读数据。
        char bufs[128] = "";
        int len  = read(fdm[0],bufs,sizeof(bufs));
        printf("父进程从管道中读到的数据是:%s\n",bufs);
        //避免孤儿进程。
        wait(NULL);
    }
    //子进程空间
    if (pid == 0 )
    {
        //1子进程读。  子进程先执行  阻塞。
        char buf[128] = "";
        int len = read(fds[0],buf,sizeof(buf));
        printf("子进程从管道fds中读到的数据是:%s\n",buf);
        
        //2子进程写
        const char *str1 = "hello parents!\n";
        write(fdm[1],str1,strlen(str1));
        
    }


    return 0;
}
